<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/11/2 0002
 * Time: 16:41
 */

/**
 * 二维码生成支付接口
 * @link https://global.alipay.com/service/transaction_QR_Code/13
 *
 */
class GlobalAlipayAcquirePrecreateBuilder extends AlipayTradeBuilder
{
    public function __construct()
    {
        $this->params['product_code'] = 'OVERSEAS_MBARCODE_PAY';
        $this->params['currency'] = 'USD';
        $this->params['trans_currency'] = 'CNY';
        $this->params['quantity'] = 1;
        $this->params['timestamp'] = $this->getMillisecond();
    }

    /**
     * 服务器异步通知页面路径：支付宝服务器主动通知商户网站里指定的页面http路径。
     * @param $notify_url
     * @return $this
     */
    public function setNotifyUrl($notify_url)
    {
        $this->params['notify_url'] = $notify_url;
        return $this;
    }

    /**
     * 服务器异步通知页面路径：支付宝服务器主动通知商户网站里指定的页面http路径。
     * @return mixed
     */
    public function getNotifyUrl()
    {
        return $this->params['notify_url'];
    }

    /**
     * @return mixed|null 支付宝合作商户网站唯一订单号。
     */
    public function getOutTradeNo()
    {
        return isset($this->params['out_trade_no']) ? $this->params['out_trade_no'] : null;
    }

    /**
     * 支付宝合作商户网站唯一订单号。
     * @param string $out_trade_no
     * @return $this
     */
    public function setOutTradeNo($out_trade_no)
    {
        $this->params['out_trade_no'] = $out_trade_no;
        return $this;
    }

    /**
     * 商品的标题/交易标题/订单标题/订单关键字等。该参数最长为128个汉字
     * @return mixed|null
     */
    public function getSubject()
    {
        return isset($this->params['subject']) ? $this->params['subject'] : null;
    }

    /**
     * 商品的标题/交易标题/订单标题/订单关键字等。该参数最长为128个汉字
     * @param string $subject
     * @return $this
     */
    public function setSubject($subject)
    {
        $this->params['subject'] = $subject;
        return $this;
    }

    public function setBody($body)
    {
        $this->params['body'] = $body;
        return $this;
    }

    public function getBody()
    {
        return isset($this->params['body']) ? $this->params['body'] : null;

    }

    public function setShowUrl($show_url)
    {
        $this->params['show_url'] = $show_url;
        return $this;
    }

    public function getShowUrl()
    {
        return isset($this->params['show_url']) ? $this->params['show_url'] : null;
    }
    /**
     * 结算币种
     *
     *  编码     币种   位数
     *  CNY     人民币   2
     *  AUD	    澳元	    2
     *  CAD	    加拿大元	2
     *  CHF	    瑞士法郎	2
     *  DKK	    丹麦克朗	2
     *  EUR	    欧元	    2
     *  GBP	    英镑	    2
     *  HKD	    港币	    2
     *  JPY	    日元	    0
     *  KRW	    韩元	    0
     *  NOK	    挪威克朗	2
     *  NZD	    新西兰元	2
     *  SEK	    瑞典克朗	2
     *  SGD	    新币	    2
     *  THB	    泰铢	    2
     *  USD	    美元	    2
     * @param string $currency
     * @return $this
     */
    public function setCurrency($currency)
    {
        $this->params['currency'] = $currency;
        return $this;
    }

    /**
     * 结算币种
     * @return string
     */
    public function getCurrency()
    {
        return isset($this->params['currency']) ? $this->params['currency'] : null;
    }

    /**
     * 商品的外币金额，范围是0.01～1000000.00.
     * @param string $total_fee
     * @return $this
     */
    public function setTotalFee($total_fee)
    {
        $this->params['total_fee'] = $total_fee;
        return $this;
    }

    /**
     * 商品的外币金额，范围是0.01～1000000.00.
     * @return string
     */
    public function getTotalFee()
    {
        return isset($this->params['total_fee']) ? $this->params['total_fee'] : null;
    }

    /**
     * 用户交易币种
     * @param string $trans_currency
     * @return $this
     */
    public function setTransCurrency($trans_currency)
    {
        $this->params['trans_currency'] = $trans_currency;
        return $this;
    }

    /**
     * 范围为0.01～1000000.00
     * 如果商户网站使用人民币进行标价就是用这个参数来替换total_fee参数，rmb_fee和total_fee不能同时使用
     * @return string
     */
    public function getTransCurrency()
    {
        return isset($this->params['trans_currency']) ? $this->params['trans_currency'] : null;
    }

    /**
     * 此为买家登陆到完成支付的有效时间
     * 示例：5m 10m 15m 30m 1h 2h 3h 5h 10h 12h 1d.
     * 默认12小时，最大15天。
     * @param $timeout_rule
     * @return $this
     */
    public function setItBPay($it_b_pay)
    {
        $this->params['it_b_pay'] = $it_b_pay;
        return $this;
    }

    /**
     * 此为买家登陆到完成支付的有效时间
     * 示例：5m 10m 15m 30m 1h 2h 3h 5h 10h 12h 1d.
     * 默认12小时，最大15天。
     * @return string|null
     */
    public function getItBPay()
    {
        return isset($this->params['it_b_pay']) ? $this->params['it_b_pay'] : null;
    }

    /**
     * 网站支付: OVERSEAS_MBARCODE_PAY
     * @param string $product_code
     * @return $this
     */
    public function setProductCode($product_code)
    {
        $this->params['product_code'] = $product_code;
        return $this;
    }

    /**
     * 网站支付: OVERSEAS_MBARCODE_PAY
     * @return string
     */
    public function getProductCode()
    {
        return isset($this->params['product_code']) ? $this->params['product_code'] : null;
    }

    /**
     * 精确到微秒的时间戳：1456507704121
     * @param string $timestamp
     * @return $this
     */
    public function setTimestamp($timestamp)
    {
        $this->params['timestamp'] = $timestamp;
        return $this;
    }

    /**
     * 精确到微秒的时间戳：1456507704121
     * @return null
     */
    public function getTimestamp()
    {
        return isset($this->params['timestamp']) ? $this->params['timestamp'] : null;
    }

    public  function getServiceName()
    {
        return 'alipay.acquire.precreate';
    }
}